#include <iostream>
#include <signal.h>
#include <unistd.h>
using namespace std;
void sigcb(int signo)
{
    // 自定义递达动作
    while (1)
    {
        cout << "信号自定义动作被触发:" << signo << endl;
        sleep(3);
    }
}
int main()
{
    // sigaction函数操作
    struct sigaction iact; // 用于输入
    struct sigaction oact; // 用于输出
    // 设置信号对应的递达动作
    iact.sa_handler = sigcb;
    // 初始化阻塞信号集
    sigemptyset(&iact.sa_mask);
    // 设置阻塞信号集 SQGQUIT为3号信号
    sigaddset(&iact.sa_mask, SIGQUIT);
    // SIGINT为2号信号
    sigaction(SIGINT, &iact, &oact);
    while (1)
    {
        // 输出进程PID供外部指令使用
        std::cout << getpid() << std::endl;
        sleep(5);
    }
    return 0;
}

// signal函数操作
// 设置SIGINT信号的递达动作
// signal(SIGINT, sigcb);
// // 进程持续进行
// while (1)
// {
//     // 输出进程PID供外部指令使用
//     std::cout << getpid() << std::endl;
//     sleep(1);
// }
// return 0;

// sigprocmask函数操作
// sigset_t isig;
// sigset_t osig;
// sigemptyset(&isig);
// sigaddset(&isig, 2);
// sigaddset(&isig, 40);
// sigprocmask(SIG_BLOCK, &isig, &osig);
// while (1)
//     ;
// return 0;